Mybatis/tk |
您所在的位置:网站首页 › mybatis generator 驼峰 › Mybatis/tk |
Mybatis-generator使用文档
1.简介2.使用2.1 使用流程2.2 maven依赖2.3 Xml配置文件2.4 入口2.4.1 使用java代码运行2.4.2 使用maven插件运行2.4.3 两种入口的路径差异
3.mybatis-generator 与基于Mybatis的通用接口设计框架的集成3.1 tk-mybatis下使用mybatis-generator3.1.1 maven依赖3.1.2 xml配置文件3.1.2.1 Mapper接口超类的设计3.1.2.2 xml文件配置tk-mybatis插件
3.1.3 入口
3.2.强大的mybatis-plus-generator3.2.1 maven依赖3.2.2 编写java配置文件
1.简介
mybatis-generator (MBG) 是mybatis 提供的代码生成器,通过配置一个数据库连接,按照通用的代码规则生成各个数据库表对应的POJO实体类/Mapper接口/mapper.xml sql映射文件,建立Object 和db - relation 映射关系,最终生成的这些java类和xml文件就足够我们在开发中访问到数据库的表。 如何快速入门mybatis-generator,最直接有效的方式就是查阅mybatis官方提供的入门指南 . 如果你的时间比较紧,急于使用该构件完成代码的自动生成,可以耐心看完这篇博文。我将介绍在mybatis源生及其衍生框架tk-mybatis和mybatis-plus如何快速搭建一个行之有效的generator。 2.使用本文默认使用maven管理我们的项目和所需依赖。同时,mybatis-generator默认采用xml文件进行配置。 2.1 使用流程我们可以通过一个简单的使用流程来说明清楚集成mybatis-generator需要进行的工作。 这里列出必要的组件: 入口(可以是maven-plugins或者一个java类)generator-config.xml 文件数据库表你需要完成的工作按顺序分别是: 设计你的数据库表在项目中引入mabatis-generator依赖包编写xml配置文件配置解析运行xml配置文件的入口最终结构展示 2.2 maven依赖 org.mybatis.generator mybatis-generator-core 1.4.0 mysql mysql-connector-java 8.0.21 runtime 2.3 Xml配置文件下面是一个简单的xml配置文件,适用于源生的mybatis-generator。你也可以从上文中官网指南中获取该xml文档内容。 需要注意的是,你需要预先把javaModelGenerator 、sqlMapGenerator 、javaClientGenerator 中配置的包和目录创建好,以方便后续的生成。 2.4 入口mybatis-generator 提供了多种运行代码生成器的入口,包括 命令行antTaskmaven-pluginsjava代码等,这里仅介绍常用的maven-plugins 和 java代码两种方式。(注意:两种方式在配置文件中有一个极小的差异,后面将会介绍) 2.4.1 使用java代码运行你需要创建一个包含main方法的简单java类,如下: package cn.xxx import org.mybatis.generator.api.MyBatisGenerator; import org.mybatis.generator.config.Configuration; import org.mybatis.generator.config.xml.ConfigurationParser; import org.mybatis.generator.internal.DefaultShellCallback; import java.io.InputStream; import java.net.URL; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; /** *一句话描述 * * @author Kern */ public class MyBatisGeneratorRunner { public static void main(String[] args) { try { //如下三行代码是获取到配置文件的输入流,只要获取到配置文件的File实例或者输入流即可,方式任选 ClassLoader classLoader = MyBatisGeneratorRunner.class.getClassLoader(); URL url = classLoader.getResource("generator-config.xml"); InputStream configInputStream = url.openStream(); //warnings字符串集合用于存放生成过程中的警告信息,并非异常信息,所以可以按需输出 List warnings = new ArrayList(); ConfigurationParser cp = new ConfigurationParser(warnings); Configuration config = cp.parseConfiguration(configInputStream); //默认的shell命令回调,主要用于配置文件已存在时是否覆盖 DefaultShellCallback callback = new DefaultShellCallback(true); MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings); myBatisGenerator.generate(null); if (!warnings.isEmpty()) { String error = warnings.stream().collect(Collectors.joining(System.lineSeparator())); throw new IllegalArgumentException("代码生成警告:" + error); } } catch (Exception e) { e.printStackTrace(); } } }点击运行即可完成代码的生成,如下示意图 2.4.2 使用maven插件运行找到你的项目的pom文件,在build块中做如下配置 org.mybatis.generator mybatis-generator-maven-plugin 1.4.0 ${pom.basedir}/src/main/resources/maven-plugins-generator-config.xml true运行该插件,即可。 运行结果如下,这里我前面已经使用java代码生成了,因此有warning消息显示已经存在这些文件,并且已经执行覆盖了 2.4.3 两种入口的路径差异配置文件中javaModelGenerator 、sqlMapGenerator 、javaClientGenerator三个元素的targetProject中路径配置在使用不同入口解析时是由差异的,因此需要注意。 先给出结论 当使用java运行代码时: 目标目录 = System.getProperty(“user.dir”) + targetProject配置的值当使用Maven插件运行时: 目标目录 = ${pom.basedir} + targetProject配置的值听起来好像是一样的,的确在某些项目中是一样的,这要取决于你的项目结构和入口配置的位置。 例如我的项目结构如下 -- parent -- moduleA -- GeneratorRunner.java(代码生成java入口类) -- pom.xml(mybatis-generator-maven-plugin:maven插件) -- moduleB此时 System.getProperty(“user.dir”) = parent的根目录 而 ${pom.basedir} = moduleA的根目录,就不一样了。 又如果我的项目结构如下 -- project -- GeneratorRunner.java(代码生成java入口类) -- pom.xml(mybatis-generator-maven-plugin:maven插件)此时 System.getProperty(“user.dir”) 和 ${pom.basedir} 都等于project的根目录。 因此我们在配置时要准确配置targetProject的路径 结果展示如下 3.mybatis-generator 与基于Mybatis的通用接口设计框架的集成无论是tk-mybatis 或者 mybatis-plus都是基于mybatis的通用mapper设计,设计了一系列通用的持久层CURD方法,并以所有mapper接口超类的方式提供给用户。例如常用的selectByExample,selectByPrimaryKey,save,updateByExample,deleteByExample等等。 此外,tk-mybatis对mybatis-generator提供了直接的支持,和源生一样,都使用xml进行配置,但mybatis-plus是通过java代码进行配置的,且mybatis-plus提供了更多的功能,可以生成service层和controller层的代码。 下面将分别介绍tk-mybatis和mybatis-plus的代码生成。 3.1 tk-mybatis下使用mybatis-generator 3.1.1 maven依赖tk-mybatis采用和mybatis相同的设计思路,提供了基于springboot的starter包,并把用于generator的类放在另外一个包下。 首先是主包的依赖添加 tk.mybatis mapper-spring-boot-starter 2.1.5 org.mybatis.spring.boot mybatis-spring-boot-starter 2.1.3 mysql mysql-connector-java runtime然后用于生成器的依赖 tk.mybatis mapper 4.1.5 true org.mybatis.generator mybatis-generator-core 1.3.7 true我们同源生依赖进行简单比较后很容易看到,只要在源生的依赖下添加tk-mybatis的对应依赖支持即可。 3.1.2 xml配置文件 3.1.2.1 Mapper接口超类的设计xml配置文件与源生的基本无差异,唯一一点差异在于通用mapper接口的超类,我们知道tk-mybatis提供了一系列通用的持久层方法,并以接口的形式供我们继承使用,查看 tk.mybatis.mapper.common 包下可以看到如下的一系列接口, 其中例如 InsertSelectiveMapper 封装了新增的方法,因为是国内的程序员设计的,因此我们可以看到其中的中文注解,说明的很清楚。 @RegisterMapper public interface InsertSelectiveMapper { /** * 保存一个实体,null的属性不会保存,会使用数据库默认值 * * @param record * @return */ @InsertProvider(type = BaseInsertProvider.class, method = "dynamicSQL") int insertSelective(T record); }因此,我们可以根据tk-mybatis提供的这些接口,设计一个我们需要的mapper接口超类,并在xml配置中说明所有生成的mapper接口都需要继承这个超类。 例如设计如下的这样一个接口。 import tk.mybatis.mapper.common.Mapper; import tk.mybatis.mapper.common.MySqlMapper; /** ** Parent interface of mappers. * * * @author Kern */ public interface MyMapper extends Mapper, MySqlMapper { } 3.1.2.2 xml文件配置tk-mybatis插件我们在设计完超类,需要在xml中声明要使用这个超类, 下面的xml仅展示差异部分,其余部分可参考上文所述源生的generator内容。 可以看到,tk-mybatis以源生插件的形式提供了支持。 3.1.3 入口java形式与源生无差异,插件形式仅需要在源生插件中依赖tk.mybatis:mapper即可,如下 org.mybatis.generator mybatis-generator-maven-plugin 1.3.7 ${pom.basedir}/src/main/resources/maven-plugins-generator-config.xml true tk.mybatis mapper 4.1.5结果展示如下 此外,无论是哪种形式,都要注意版本兼容问题,笔者使用的1.3.7 和 4.1.5是可以兼容的,但是如果使用mybatis-generator的1.4.0版本则与tk.mybatis:mapper:4.1.5 不兼容,会导致运行失败。 同时,tk-mybatis对一些二进制大对象的数据类型的支持不够,在生成WithBLOBs的pojo类时有一些限制,由于不是我们常用的数据类型,因此这里不加以讨论,感兴趣的同学可以去查阅相关文档。 使用后记: tk-mybatis在生成的mapper接口和xml文件中存在了一些其他的问题,将重复生成已声明的接口,需要手动去删除,非常的不方便。推测可能是版本不兼容导致的,由于作者花了一些时间没有找到具体原因,目前已经弃用tk-mybatis。特反馈给广大的读者朋友们。 3.2.强大的mybatis-plus-generator在我看来,tk-mybatis和mybatis-plus的最大差异在于,mybatis-plus提供了详细而全面的用户手册 -> Mybatis-plus官网 而 tk-mybatis 甚至都找不到官方网站。对于一个初学者而言,缺乏文档支持也就基本失去了竞争力。 话不多说,与源生和tk-mybatis不同的是,mybatis-plus仅支持java代码配置的形式, 官网中有完整的教学和演示文档。因此笔者仅演示一下我的使用过程。 3.2.1 maven依赖 org.apache.velocity velocity-engine-core 2.2 compile true com.baomidou mybatis-plus-generator 3.4.0 com.baomidou mybatis-plus-boot-starter 3.4.0 mysql mysql-connector-java runtime 3.2.2 编写java配置文件 package cn.kerninventory.mybatis.gen.mybatisplus.gen; import cn.kerninventory.mybatis.gen.mybatisplus.pojo.BaseEntity; import com.baomidou.mybatisplus.generator.AutoGenerator; import com.baomidou.mybatisplus.generator.config.DataSourceConfig; import com.baomidou.mybatisplus.generator.config.GlobalConfig; import com.baomidou.mybatisplus.generator.config.PackageConfig; import com.baomidou.mybatisplus.generator.config.StrategyConfig; import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; /** *一句话描述 * * @author Kern */ public class MybatisPlusGeneratorRunner { public static void main(String[] args) { AutoGenerator generator = new AutoGenerator(); //配置数据库连接参数 DataSourceConfig dataSourceConfig = new DataSourceConfig(); dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver"); dataSourceConfig.setUrl("jdbc:mysql://127.0.0.1:3306/mybatis-gen-demo?serverTimezone=UTC"); dataSourceConfig.setUsername("root"); dataSourceConfig.setPassword("root"); generator.setDataSource(dataSourceConfig); //配置文件生成路径参数 PackageConfig packageConfig = new PackageConfig(); packageConfig.setParent("cn.kerninventory.mybatis.gen.mybatisplus"); packageConfig.setEntity("pojo"); packageConfig.setMapper("mapper"); packageConfig.setXml("xml"); generator.setPackageInfo(packageConfig); //策略配置 StrategyConfig strategyConfig = new StrategyConfig(); //pojo类超类 strategyConfig.setSuperEntityClass(BaseEntity.class); //表名转驼峰 strategyConfig.setNaming(NamingStrategy.underline_to_camel); //字段驼峰命名 strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel); //set方法builder模式 strategyConfig.setChainModel(true); //使用lombok注解 //strategyConfig.setEntityLombokModel(true); //不生成serial version uuid //strategyConfig.setEntitySerialVersionUID(false); //要生成的表名 strategyConfig.setInclude("test"); generator.setStrategy(strategyConfig); //全局配置 GlobalConfig globalConfig = new GlobalConfig(); //输出目录 globalConfig.setOutputDir(System.getProperty("user.dir") + "/gen-mybatisplus/src/main/java"); globalConfig.setAuthor("MPG"); generator.setGlobalConfig(globalConfig); generator.execute(); } }输出结果展示 框架结构 pojo类 mapper接口 以上,是mybatis-plus的代码生成器使用演示,官网的文档还是比较详尽的,可以直接去官网参考。以上内容仅供参考。 全文结束,希望对大家有所帮助。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |